package com.example.mq.common;

import java.io.*;

public class BinaryTool {
    //将一个Java对象序列化成一个字节数组
    //这个类必须实现了Serializable
    public static byte[] toBytes(Object object) throws IOException {
        //此处的 ByteArrayOutputStream 可以不用关闭,是一个纯内存的对象,不涉及到文件描述符
        try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
            try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream)) {
                //此处 writeObject 会将 object 对象进行序列化,生成的二进制字节数据,写入到objectOutputStream中
                //objectOutputStream 关联到了 byteArrayOutputStream, 最终就写到了 byteArrayOutputStream
                objectOutputStream.writeObject(object);
            }
            //将 byteArrayOutputStream 中序列化后的二进制数据 转成byte[] 数组
            return byteArrayOutputStream.toByteArray();
        }
    }

    public static Object fromBytes(byte[] data) throws IOException, ClassNotFoundException {
        try(ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data)){
            try(ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream)){
                //此处的 readObject 将 data byte[] 转成对象
                return objectInputStream.readObject();
            }
        }
    }
}
